package com.nnnu.wsnackshop.service;

import com.nnnu.wsnackshop.pojo.dto.CartItemAddDTO;
import com.nnnu.wsnackshop.pojo.dto.CartItemUpdateDTO;
import com.nnnu.wsnackshop.pojo.entity.Carts;
import com.baomidou.mybatisplus.extension.service.IService;
import com.nnnu.wsnackshop.pojo.vo.CartVO;

import java.util.List;

/**
 * <p>
 * 购物车 服务类
 * </p>
 *
 * @author zk
 * @since 2025-05-14
 */
public interface ICartsService extends IService<Carts> {

    /**
     * 获取用户购物车
     * @param userId 用户ID
     * @return 购物车数据
     */
    CartVO getCartByUserId(Integer userId);

    /**
     * 添加商品到购物车
     * @param userId 用户ID
     * @param cartItemAddDTO 添加商品DTO
     * @return 是否成功
     */
    boolean addCartItem(Integer userId, CartItemAddDTO cartItemAddDTO);

    /**
     * 更新购物车商品
     * @param userId 用户ID
     * @param cartItemId 购物车商品ID
     * @param cartItemUpdateDTO 更新信息DTO
     * @return 是否成功
     */
    boolean updateCartItem(Integer userId, Integer cartItemId, CartItemUpdateDTO cartItemUpdateDTO);

    /**
     * 删除购物车商品
     * @param userId 用户ID
     * @param cartItemId 购物车商品ID
     * @return 是否成功
     */
    boolean deleteCartItem(Integer userId, Integer cartItemId);

    /**
     * 清空购物车
     * @param userId 用户ID
     * @return 是否成功
     */
    boolean clearCart(Integer userId);

    /**
     * 获取购物车商品数量
     * @param userId 用户ID
     * @return 商品数量
     */
    Integer getCartCount(Integer userId);

    /**
     * 选择/取消选择购物车商品
     * @param userId 用户ID
     * @param cartItemId 购物车商品ID
     * @param selected 是否选中
     * @return 是否成功
     */
    boolean toggleCartItemSelection(Integer userId, Integer cartItemId, Boolean selected);

    /**
     * 全选/取消全选购物车商品
     * @param userId 用户ID
     * @param selected 是否选中
     * @return 是否成功
     */
    boolean toggleAllCartItemsSelection(Integer userId, Boolean selected);

    /**
     * 批量删除购物车商品
     * @param userId 用户ID
     * @param ids 购物车商品ID列表
     * @return 是否成功
     */
    boolean batchDeleteCartItems(Integer userId, List<Integer> ids);
}
